/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beancomentarios;

import java.util.ArrayList;
import java.util.Collections;

/**
 * Clase que contiene el arraylist de comentarios y permite suscribirse a sus cambios
 * @author Miguel González - Ceura
 */
public class ModeloComentarios {
    
    private ArrayList comentarios;
    
    private ArrayList<ComentarioListener> listeners;
    
    /**
     * Constructor por defecto del modelo
     */
    public ModeloComentarios() {
        comentarios = new ArrayList<Comentario>();
        listeners = new ArrayList<ComentarioListener>();
    }
    
    /**
     * Permite suscribirse para escuchar al modelo
     * @param l ComentarioListener
     */
    public void addComentarioListener(ComentarioListener l) {
        if(l != null) {
            listeners.add(l);
        }
    }
    
    /**
     * Permite desuscribirse al modelo para dejar de escucharlo
     * @param l 
     */
    public void removeComentarioListener(ComentarioListener l) {
        if(l != null) {
            listeners.remove(l);
        }
    }
    
    /**
     * Permite añadir un comentario al modelo y lo notifica
     * @param comentario Comentario
     */
    public void addComentario(Comentario comentario) {
        comentarios.add(comentario);
        
        //Ordenamos los comentarios
        Collections.sort(comentarios);
        
        //Notificamos
        for(ComentarioListener l : listeners) {
            l.addedComentario(new ComentarioEvent(comentario));
        }
    }
    
    /**
     * Permite eliminar un comentario del modelo y lo notifica
     * @param comentario Comentario
     */
    public void removeComentario(Comentario comentario) {
        comentarios.remove(comentario);
        
        //Notificamos
        for(ComentarioListener l : listeners) {
            l.removedComentario(new ComentarioEvent(comentario));
        }
    }
    
    /**
     * Devuelve todos los comentarios que almacena el modelo
     * @return ArrayList<Comentario>
     */
    public ArrayList<Comentario> getComentarios() {
        return comentarios;
    }
}